<?php
/**
 *   FONCTIONS
 */


/*********************************/
/* FONCTIONS CHAINES             */
/*********************************/

// Renvoie le libellé de la famille en fonction du code reçu
function debugmoi($aObject) {
    echo "<div style=\"color:balck;background-color:pink;\"><pre>";
    echo "[ressource:".@get_resource_type($aObject)."]\n";
    echo "[type:".gettype($aObject)."]\n";
    if (@get_resource_type($aObject)=="mysql link")
        echo mysql_error();
    elseif (is_array($aObject))
        print_r($aObject);
    elseif (is_bool($aObject))
        echo ($aObject)?"true":"false";
    else
        echo $aObject;
    var_dump($aObject);
    echo "</pre></div>";
}

// Tronque une chaîne par "mots" à un nombre de caractères donnés
function coupe_chaine($aText,$nbChar=0,$aSep='...') {
    if ( strlen($aText) > $nbChar && ($nbChar!=0) ) {
        $tmpArr = explode( " ", $aText );
        $tmpStr = "";
        while( list($k,$v) = each($tmpArr) ) {
            if ( strlen($tmpStr) >= $nbChar ) break;
            $tmpStr .= $v.' ';
        }
        $tmpStr  = substr( $tmpStr, 0, strlen($tmpStr)-1 );
        if (strlen($tmpStr)>$nbChar) $tmpStr = substr($tmpStr, 0, $nbChar);
        $tmpStr .= " ".$aSep;
    }
    else $tmpStr = $aText;

    return $tmpStr;
}

// Complète une chaîne par la gauche (défaut) jusqu'à une taille donnée avec un caractère
function complete_chaine($aText="",$aSize=6,$aChar=" ",$fromLeft=true) {
    if ($fromLeft) return str_pad($aText, $aSize, $aChar, STR_PAD_LEFT);
    else return str_pad($aText, $aSize, $aChar, STR_PAD_RIGHT);
}

// Returns a human readable size
// Usage : size_hum_read(filesize($file),$numberofdecimals);
function size_hum_read($size,$dec=2){
    $i=0;
    $iec = array("o", "Ko", "Mo", "Go", "To", "Po", "Eo", "Zo", "Yo");
    while (($size/1024)>1) {
      $size=$size/1024;
      $i++;
    }
    $dec += 1; if ($dec<2) $dec=0;
    return substr($size,0,strpos($size,'.')+$dec).$iec[$i];
}

// "123" -> "cent vingt trois"
function nombre_litteral($nombre) {
    // on fait de cette valeur un nombre
    $nombre = preg_replace("/[^, 0-9]/", "", $nombre);
    if ($nombre == "")
    return "zéro";
    $parties = split(", " , $nombre);
    $nombre = array_shift($parties);
    if (count($parties) > 0)
    $nombre .= ", ".implode("", $parties);
    // initialisation
    $unite = array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept",
                "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize",
                "dix-sept", "dix-huit", "dix-neuf");
    $dizaine = array("", "dix", "vingt", "trente", "quarante", "cinquante",
                    "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix");
    $les_centaines = floor($nombre / 100);
    $les_dizaines = floor(($nombre - $les_centaines * 100) / 10);
    $lunite = ($nombre - $les_centaines * 100 - $les_dizaines * 10);
    // cas de la virgule
    if (ereg(', ', $nombre)){
    list($e, $d) = explode(", ", $nombre);
    $r = nombre_litteral($e);
    $z = substr("$d", 0, strlen($d) - strlen(intval($d)));
    $rc = nombre_litteral(intval($d));
    if ($rc != "zéro") {
        $z = ereg_replace("0", "zéro ", $z);
        $r = "$r virgule $z".nombre_litteral($d);
    }
    return $r;
    }
    // calcul
    $r = "";
    if ($nombre < 1000) {
    // en dessous de cent
    if ($les_dizaines*10 + $lunite == 0) {
        $r .= "zéro";
    } else if ($les_dizaines*10 + $lunite < 20) {
        $r .= $unite[$les_dizaines*10 + $lunite];
    } else if (($les_dizaines == 8) && ($lunite==0)) {
        $r .= $dizaine[$les_dizaines]."s";
    } else if (in_array( $les_dizaines, array(2, 3, 4, 5, 6, 8))) {
        $r .= $dizaine[$les_dizaines]." ".$unite[$lunite];
        if (($lunite==1) && ($les_dizaines < 8))
        $r = ereg_replace(" ", " et ", $r);
    } else if ( in_array($les_dizaines, array(7, 9))) {
        $r .= $dizaine[$les_dizaines-1]." ".$unite[$lunite+10];
        if (($lunite==1) && ($les_dizaines == 7))
        $r = ereg_replace(" ", " et ", $r);
    }
    // pour les centaines :
    if ($les_centaines > 1) {
        if ($r == "zéro")  // cas des centaines tout rond
        $r = $unite[$les_centaines]." cents ";
        else
        $r = $unite[$les_centaines]." cent ".$r;
    } else if ($les_centaines == 1) {
        if ($r == "zéro")
        $r = "";
        $r = "cent ".$r;
    }
    } else if ($nombre < 1000000000000000) {
    // cela couvre largement les nombres classiques.
    $bloc = array();
    while($nombre > 0) {
        $milliers = floor($nombre / 1000);
        $mille = $nombre - $milliers*1000;
        array_push($bloc, $mille);
        $nombre = ($nombre - $mille) / 1000;
    }
    $titres = array("", "mille", "million", "milliard", "billion", "trillion");
    foreach ($bloc as $b) {
        $s = "s";
        $rc = nombre_litteral($b);
        $t = array_shift($titres);
        if ($rc != "zéro") {
        if ($rc == "un") {
            if ($t == "mille")
            $rc = "";
        }
        if (in_array($t, array("", "mille")) || ($rc == "un"))
            $s = "";
        $r = $rc." $t$s ".$r;
        }
    }
    }
    return $r;
}


/*********************************/
/* FONCTIONS COOKIES              */
/*********************************/

// Enregistrement d'une variable dans le cookie (1 an de validité par défaut) ---ATTENTION--- Le cookie n'est utilisable que sur la page "suivante" et non directement
function setCookieVal($myVariable,$myValeur,$myExpire=31536000) {
  return setcookie( $myVariable, $myValeur, time()+$myExpire, "/" );
}
// Lit la variable demandée dans le cookie en cours
function getCookieVal($myVariable) {
  if ( isset($_COOKIE[$myVariable]) ) return $_COOKIE[$myVariable];
  else return Null;
}
// Supprime la variable du cookie
function delCookieVal($myVariable) {
  return setcookie( $myVariable, "", time() );
}


/*********************************/
/* FONCTIONS CHIFFREMENT         */
/*********************************/

// Fonction de chiffrement d'une donnée
function chiffrement($clearData) {
//echo "clear:$clearData";
    // C_CRYPT_KEY défini dans le fichier de config
    $key       = _CRYPTKEY_;
    $iv        = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $clearData, MCRYPT_MODE_ECB, $iv);
    $encode    = base64_encode($passcrypt);
//echo "encode:$encode";
    return $encode;
}

// Déchiffrement d'une donnée chiffrée par la fct "chiffrement()"
function dechiffrement($cryptedData) {
//echo "crypte:$cryptedData";
    // C_CRYPT_KEY défini dans le fichier de config
    $key       = _CRYPTKEY_;
    $decoded   = base64_decode($cryptedData);
    $iv        = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_ECB, $iv);
//echo "decrypte:$decrypted";
    return trim($decrypted);
}

?>